package com.lost.octopus.es.processor.resolver;

import com.lost.octopus.es.processor.entity.ShareListRequest;
import com.lost.octopus.es.helper.annotation.EsSort;
import com.lost.octopus.es.helper.constant.EsFieldMappingType;

import java.util.List;

import lombok.Data;
import lombok.EqualsAndHashCode;

/**
 * 扩展ShareListRequest
 * 增加定制化属性
 * @author zhangbh
 **/
@Data
@EqualsAndHashCode(callSuper = true)
public class EsShareListRequest<T> extends ShareListRequest<T> {

    /**
     * 是否打印日志
     */
    private boolean printLog = true;
    /**
     * 匹配高亮字段
     */
    private String highlightField;
    /**
     * 是否使用排序
     */
    private boolean needSort = true;

    /**
     * 是否按照匹配度排序，如果开启比较耗性能
     */
    private boolean explain;

    /**
     * 自定义排序
     */
    private List<SortField> sorts;

    @Data
    public static class SortField {

        /**
         * 字段名
         */
        private String fieldName;
        /**
         * 如果当前字段未映射到索引中，则设置要使用的类型。
         * 指定类型告诉 Elasticsearch 排序值应该具有什么类型，这对于交叉索引搜索很重要，如果排序字段仅存在于某些索引上。
         * 如果未映射的类型为null，那么如果一个或多个索引没有当前字段的映射，则查询执行将失败。
         * @see EsFieldMappingType
         */
        private String unmappedType;
        /**
         * 排序方式： ASC，DESC
         */
        private EsSort.SortOrder order;
    }

}
